// fib_sysv.c - 斐波那契 + 奇偶判断 + 输出
// 注意：putint 和 putch 是简化输出函数（模拟）

int fibonacci(int n);
int isOdd(int num);
void printResults(int fibValue, int isOddResult);

int globalCounter = 0;

// ✅ 提前声明 putch，供 putint 使用
void putch(char c);  // <<<<<<<<<<<<<<<<< 添加这一行！

int main() {
    int n = 10;
    int i = 0;
    int fibValue;
    int oddCount = 0;
    
    for (i = 0; i < n; i = i + 1) {
        fibValue = fibonacci(i);
        
        if (isOdd(fibValue) == 1) {
            oddCount = oddCount + 1;
        }
        
        printResults(fibValue, isOdd(fibValue));
    }
    
    return 0;
}

int fibonacci(int n) {
    if (n == 0) {
        return 0;
    } else if (n == 1) {
        return 1;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

int isOdd(int num) {
    if (num % 2 == 1) {
        globalCounter = globalCounter + 1;
        return 1;
    } else {
        return 0;
    }
}

void putint(int n) {
    if (n >= 10) {
        putint(n / 10);
    }
    putch('0' + (n % 10));  // 现在 putch 已声明，无警告
}

// ✅ putch 定义放在最后
void putch(char c) {
    asm volatile (
        "li a7, 1\n"
        "mv a0, %0\n"
        "ecall"
        :
        : "r" (c)
        : "a0", "a7"
    );
}